package br.com.sgi.model;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.NamedQuery;
import javax.persistence.Table;

import com.sun.istack.NotNull;

import br.com.sgi.util.ICombobox;

@Entity
@Table(name="FUNCAO", schema="SGI")
@NamedQuery(
	    name="buscarTodasFuncoes",
	    query=" SELECT f FROM Funcao f " +
	    	  " WHERE f.igreja.sistema.coSeqSistema =:coSistema" +
	    	  " AND f.igreja.coSeqIgreja in (:coIgreja)"
	)
public class Funcao implements ICombobox {
	
	private static final long serialVersionUID = 5639147082454358008L;

	@Id
	@Column(name="CO_SEQ_FUNCAO")
//	@GeneratedValue(strategy=GenerationType.SEQUENCE, generator = "seq_funcao_seqfuncao")  
//	@SequenceGenerator(name = "seq_funcao_seqfuncao", sequenceName = "SGI.seq_funcao")
	@GeneratedValue(strategy = GenerationType.IDENTITY)
	private Long coSeqFuncao;
	
	@Column(name="NO_FUNCAO", length=100)
	private String noFuncao;
	
	@Column(name="DS_FUNCAO", length=300)
	private String dsFuncao;
	
	@Column(name="ST_FUNCAO", length=1)
	private String statusFuncao;

//	@NotNull
//	@ManyToOne(fetch=FetchType.EAGER)
//	@JoinColumn(name="CO_SISTEMA")
//	private Sistema sistema;

	@NotNull
	@ManyToOne(fetch=FetchType.EAGER)
	@JoinColumn(name="CO_IGREJA")
	private Igreja igreja; 
	
	public Long getCoSeqFuncao() {
		return coSeqFuncao;
	}

	public void setCoSeqFuncao(Long coSeqFuncao) {
		this.coSeqFuncao = coSeqFuncao;
	}

	public String getNoFuncao() {
		return noFuncao;
	}

	public void setNoFuncao(String noFuncao) {
		this.noFuncao = noFuncao;
	}

	public String getDsFuncao() {
		return dsFuncao;
	}

	public void setDsFuncao(String dsFuncao) {
		this.dsFuncao = dsFuncao;
	}

	public String getStatusFuncao() {
		return statusFuncao;
	}

	public void setStatusFuncao(String statusFuncao) {
		this.statusFuncao = statusFuncao;
	}

	@Override
	public Object getValue() {
		return getNoFuncao();
	}
	
	@Override
	public int hashCode() {
		final int prime = 31;
		int result = 1;
		result = prime * result + ((coSeqFuncao == null) ? 0 : coSeqFuncao.hashCode());
		return result;
	}

//	public Sistema getSistema() {
//		return sistema;
//	}
//
//	public void setSistema(Sistema sistema) {
//		this.sistema = sistema;
//	}

	public Igreja getIgreja() {
		return igreja;
	}

	public void setIgreja(Igreja igreja) {
		this.igreja = igreja;
	}

}
